
///////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2009, Perry L Miller IV
//  All rights reserved.
//  BSD License: http://www.opensource.org/licenses/bsd-license.html
//
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
//
//  Class for reading an ascii file.
//
///////////////////////////////////////////////////////////////////////////////

#include "Usul/File/AsciiInputFile.h"
#include "Usul/Functions/NoThrow.h"
#include "Usul/Strings/Format.h"
#include "Usul/System/LastError.h"

#include <fstream>
#include <limits>

using namespace Usul::File;


///////////////////////////////////////////////////////////////////////////////
//
//  Constructor.
//
///////////////////////////////////////////////////////////////////////////////

AsciiInputFile::AsciiInputFile ( const std::string &name ) : BaseClass ( name, false )
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Destructor.
//
///////////////////////////////////////////////////////////////////////////////

AsciiInputFile::~AsciiInputFile()
{
}


///////////////////////////////////////////////////////////////////////////////
//
//  Read the remainder of the file.
//
///////////////////////////////////////////////////////////////////////////////

void AsciiInputFile::_read ( Buffer &buffer, SizeType size )
{
  // Reserve space in the buffer.
  buffer.reserve ( static_cast < Buffer::size_type > ( size ) );

  // Read the bytes.
  {
    Guard guard ( this );
    while ( EOF != this->_getFile().peek() )
    {
      buffer.push_back ( this->_getFile().get() );
    }
  }

  // Important!
  buffer.push_back ( '\0' );
}
